/*
 * TCP客户端类头文件
 */
#ifndef TCPCLIENT_H
#define TCPCLIENT_H

#include <WiFiClient.h>
#include <functional>
#include <String.h>

class TcpClient {
private:
    const char* _serverHost;       // 服务器主机地址
    uint16_t _serverPort;          // 服务器端口
    WiFiClient _client;            // WiFi客户端实例
    bool _isConnected;             // 连接状态标志
    unsigned long _reconnectInterval;  // 重连时间间隔(毫秒)
    unsigned long _lastReconnectAttempt;  // 上次重连尝试时间
    std::function<void(const String&, uint16_t)> _onMessageReceived;  // 消息接收回调（添加类型参数）
    std::function<void(bool)> _onConnectionStatusChanged;   // 连接状态变更回调

    // 内部方法：连接服务器
    bool connectToServer();
    // 内部方法：处理接收数据
    void handleReceivedData();

public:
    // 构造函数：初始化服务器地址和端口
    TcpClient(const char* host, uint16_t port);
    
    // 初始化客户端
    void begin();
    // 主循环处理（需在程序主loop中调用）
    void loop();
    // 发送字符串类型消息（带消息类型）
    bool send(uint16_t msgType, const String& data);
    // 发送字节数组类型消息（带消息类型）
    bool send(uint16_t msgType, const uint8_t* data, size_t length);
    // 获取当前连接状态（已移除const限定符，与实现保持一致）
    bool isConnected();
    // 设置消息接收回调函数
    void setOnMessageReceived(std::function<void(const String&,uint16_t)> callback);
    // 设置连接状态变更回调函数
    void setOnConnectionStatusChanged(std::function<void(bool)> callback);
    // 主动断开连接
    void disconnect();
};

#endif // TCPCLIENT_H